CSS parser and optimizer.
=========================

Читает ков css, автоматически вставляет префиксы, специфичные для браузеров и сжимает код.

## Возможности

  Обрабатывает внешние и внедренные файлы стилей.

  * Обрабатывает директиву css __@import__ и объединяет несколько css в единый файл.
  * Обрабатывает правила (ex. __@keyframes__, __::placeholder__).
  * Автоматически вставляет префиксы для специфичных правил css для браузеров.
  * Заменяет ссылки на изображения base64_encoded данными.
  * заменяет (.woff, .woff2, .eot, .ttf, .svg) правила __@font-face__ base64_encoded данными.
  * Оптимизирует значения цвета (#00ff77 => #0f7) и значения свойств элементов (0px => 0, -0.5 => -.5).
  * Конвертирует rgb(43, 92, 160), rgb(16.9%, 36.1%, 62.7%), hsl(214.9,57.6%,39.8%) в hex значения (#2b5ca0).
  * Удаляет двойные и прочие лишние пробелы.
  * Удаляет пробелы, если фигурная скобка, двоеточие, точка с запятой или запятая расположены до или после них.
  * Удаляет заключительную точку с запятой в списке параметров селектора или правила.
  * Удаляет пустые строки и знаки табуляции.

Reads css code, automatically inserts browser-specific prefixes and compresses the code.
There is a possibility of caching the result.

## Feachures

  Handles both external and embedded styles.

* Handles css __@import__ directive thus multiple files can be combined into one.
* Handles rules (ex. __@keyframes__), pseudoelevents (ex. __::placeholder__).
* Automatically inserts browser-specific prefixes for css properties.
* Replaces image references within CSS with base64_encoded data.
* Replaces fonts (.woff, .woff2, .eot, .ttf, .svg) references within CSS rule __@font-face__ with base64_encoded data.
* Optimizes the color settings (#00ff77 => #0f7) and property values (0px => 0, -0.5 => -.5).
* Converts rgb(43, 92, 160), rgb(16.9%, 36.1%, 62.7%), hsl(214.9,57.6%,39.8%) to hex value (#2b5ca0).
* Removes two or more consecutive spaces.
* Removes the spaces, if a curly bracket, colon, semicolon or comma is placed before or after them.
* Removes the last semicolon in the list of properties of the selector or the rule.
* Removes newline characters and tabs.

## Requirements

This program requires PHP 5.4+

## Example

    /* styles.css */

    /* This will be prefixed */
    input[type="search"]::placeholder {
        color: #ffdd55;  /* This will be reduced to #fd5 */
    }
    .some_class {
        background: #1e5799;

        /* This will be prefixed */
        background: linear-gradient(to bottom, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);

        border: #000000 solid 1px; /* This will be reduced to #000 */

        /* This will be prefixed */
        border-radius: 5px;

        /* This will be prefixed */
        box-sizing: content-box;

        margin: 0em 5px;  /* This will be replaced with 0 ( 0em; )*/
        padding: 5px 0px; /* This will be replaced with 0 ( 0px; )*/

        /* This will be prefixed */
        transition: height 0.25s ease 0.1s; /* This will be reduced to .25s and .1s */

        /* This will be prefixed */
        @keyframes eye {
            90% { transform: none; }
            95% { transform: scaleY(0.1); }
        }
    }

## Result

input[type="search"]::-webkit-input-placeholder{color:#fd5}
input[type="search"]::-moz-placeholder{color:#fd5}
input[type="search"]::-ms-input-placeholder{color:#fd5}
input[type="search"]::placeholder{color:#fd5}

.some_class{
background:#1e5799;
background:-webkit-linear-gradient(to bottom,#1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background:-moz-linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background:-o-linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
background:linear-gradient(to bottom,#1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
borrder:#000 solid 1px;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
-webkit-box-sizing:content-box;
-moz-box-sizing:content-box;
box-sizing:content-box;
margin:0 5px;
padding:5px 0;
-webkit-transition:height .25s ease .1s;
-moz-transition:height .25s ease .1s;
-o-transition:height .25s ease .1s;
transition:height .25s ease .1s;
@-webkit-keyframes eye{
90%{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}
95%{-webkit-transform:scaleY(0.1);-moz-transform:scaleY(0.1);-ms-transform:scaleY(0.1);-o-transform:scaleY(0.1);transform:scaleY(0.1)}}
@-moz-keyframes eye{
90%{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}
95%{-webkit-transform:scaleY(0.1);-moz-transform:scaleY(0.1);-ms-transform:scaleY(0.1);-o-transform:scaleY(0.1);transform:scaleY(0.1)}}
@-o-keyframes eye{
90%{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}
95%{-webkit-transform:scaleY(0.1);-moz-transform:scaleY(0.1);-ms-transform:scaleY(0.1);-o-transform:scaleY(0.1);transform:scaleY(0.1)}}
@keyframes eye{
90%{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}
95%{-webkit-transform:scaleY(0.1);-moz-transform:scaleY(0.1);-ms-transform:scaleY(0.1);-o-transform:scaleY(0.1);transform:scaleY(0.1)}}}

After finishing (removing newlines) the data file will be placed in one line.

The original code: (https://gitverse.ru/nabatov/css-optimizer)
API is generated by the (https://gitverse.ru/nabatov/phpapi)

#### COPYRIGHT AND LICENSE

Copyright (C) 2016 Victor Nabatov <nabatov.victor@gmail.com>

This program is free software.
You can redistribute it and/or modify it under the terms of the
[Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode) .
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Эта программа является свободной.
Вы можете распространять и/или модифицировать ее в соответствии c условиями
[Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/legalcode) .
Эта программа распространяется в надежде что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ;
даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.
